SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
CREATE PROCEDURE [dbo].[paAgregarPlazaDeMovimiento] 
-- <DESCRIPCION> Agrega una Plaza a una Cola de Movimientos.
-- <CONSIDERACIONES ESPECIALES> Se actualizan los campos SituacionRevista, CargoSalarial, Fecha de Alta, Agente y Organizacion cuando es necesario.
-- <TABLAS> tb_ColaDeMovimientos, tb_PlazasDeMovimiento, tb_SubServiciosAgentes, tb_ServiciosAgentes, tb_Plazas
-- <PROCEDIMIENTOS>
-- <ACTUALIZACIONES> 20-03-2006 por OTERO, Javier.
-- <ACTUALIZACIONES> 27-03-2006 por SANES,  Jorge (Actualizar Causa de Alta en Cola de Movimiento, queda por corregir la Pantalla y el paAgregarColadeMovimiento)
-- <ACTUALIZACIONES> 13-06-2006 por SANES,  Jorge (Actualizar Update de Cola de Movimientos agregando CASE por Movimiento para Situacion de Revista)
-- <ACTUALIZACIONES> 17-06-2006 por FIORUCCI, Adriana y SANES,  Jorge (Se agrego parametro para Guardar el ID de Servicio para el Movimiento)
-- <ACTUALIZACIONES> 27-09-2007 por FIORUCCI, Adriana y SANES,  Jorge (Se agrego que en base al ID de Subservicio se guarde el ID de Servicio en el campo IdServicioBase de la Tb_PlazasDeMovimiento)
-- <ACTUALIZACIONES> 28-09-2007 por FIORUCCI, Adriana y SANES,  Jorge (Se agrego control sobre codigo de enfermedad el cual debe ser >= 10000 de lo contrario es null

@IdPlaza INT,
@IdCola INT,
@Servicio INT = NULL,
@Estado INT = NULL,
@PlazaDestino INT = NULL,
@Enfermedad INT = NULL,
@RectificaA INT = NULL,
@Borrar VARCHAR(1) = NULL,
@CausaBaja INT = NULL,
@Confirmada VARCHAR(1) = NULL,
@Titularizar VARCHAR(1) = NULL,
@RelacionInterservicio INT = NULL,
@HorasDePlaza VARCHAR(1) = NULL,
@CausaAlta INT = NULL,
@ServicioRelacionado INT = NULL,
@FechaDeLicencia INT = NULL,
@ObligacionesADescontar INT = NULL,
@IdServicioBase INT = NULL

AS
SET NOCOUNT ON
-- Almacena la Situacion de Revista del Servicio
DECLARE @SituacionRevista INT
-- Almacena el Cargo Salarial del Servicio
DECLARE @CargoSalarial INT
-- Almacena el Agente del Servicio
DECLARE @Agente INT
-- Almacena la Fecha de Alta del Servicio o SubServicio (Segun corresponda por el movimiento)
DECLARE @Fecha1 DATETIME
-- Almacena el Tipo de Movimiento de la cola
DECLARE @Movimiento INT
-- Almacena el Codigo de Licencia
DECLARE @Licencia INT

-- Inicializacion de Variables.
SELECT @SituacionRevista = NULL, @CargoSalarial = NULL, @Agente = NULL, @Fecha1 = NULL

SELECT @Movimiento = Movimiento FROM tb_ColaDeMovimientos WHERE IdCola = @IdCola

-- Por si la Organizacion en la Cola de Movimientos es nula
IF EXISTS(SELECT top 1 IdCola FROM tb_ColaDeMovimientos WHERE IdCola = @IdCola AND Organizacion IS NULL)
	UPDATE tb_ColaDeMovimientos SET Organizacion = (SELECT Organizacion FROM tb_Plazas WHERE IdPlaza = @IdPlaza) WHERE IdCola = @IdCola

-- Para Guardar Siempre el ID de Servicio Base -27/09/2007
IF @Servicio IS NOT NULL AND @IdServicioBase IS NULL
    SELECT @IdServicioBase = ServicioAgente FROM tb_SubserviciosAgentes WHERE idSubServicio = @Servicio

-- Para no meter ningun codigo de enfermedad viejo - 28/09/2007
IF @Enfermedad IS NOT NULL AND @Enfermedad < 10000 -- 10000 Es el primer ID de Enfermedad Nueva 
   SET @Enfermedad = NULL

-- Para actualizar siempre la situacion de revista
IF @Servicio IS NOT NULL 
BEGIN

	-- Si la fecha de alta del movimiento no fue especificado.
	IF NOT EXISTS(SELECT top 1 IdCola FROM tb_ColaDeMovimientos WHERE IdCola = @IdCola AND Fecha1 IS NOT NULL)
	BEGIN
		-- Si el movimiento es Fin de Licencia. (En el Inicio de Licencia siempre viene Fecha de Alta)
		IF @Movimiento = 5
		BEGIN
			SELECT @Fecha1 = FechaAlta, @Licencia = Licencia FROM tb_SubServiciosAgentes WHERE IdSubServicio = @Servicio
			UPDATE tb_ColaDeMovimientos SET Fecha1 = @Fecha1, Licencia = @Licencia WHERE IdCola = @IdCola
		END
		ELSE -- Para el resto de los movimientos.
		BEGIN
			SELECT @Fecha1 = S.FechaAlta FROM tb_SubServiciosAgentes INNER JOIN tb_ServiciosAgentes S ON IdServicioAgente = ServicioAgente WHERE IdSubServicio = @Servicio
			UPDATE tb_ColaDeMovimientos SET Fecha1 = @Fecha1 WHERE IdCola = @IdCola
		END
		-- Se actualiza la Fecha de Alta del movimiento
	END  

	-- Se obienten el resto de los datos.
	SELECT @SituacionRevista = SituacionRevista, @CargoSalarial = CargoSalarial, @Agente = Agente FROM tb_SubServiciosAgentes INNER JOIN tb_ServiciosAgentes ON IdServicioAgente = ServicioAgente WHERE IdSubServicio = @Servicio

	-- Si A Titularizar esta en NULL, busco el dato para el servicio

	IF @Titularizar IS NULL AND @IdServicioBase IS NOT NULL 
		SELECT  @Titularizar = CASE WHEN  EstaEnProcesoDeTitularizacion IS NULL OR EstaEnProcesoDeTitularizacion = 'N' THEN 'N' ELSE 'S' END   FROM Tb_ServiciosAgentes  WHERE idServicioAgente =  @IdServicioBase

	 -- Se actualiza la Cola de Movimientos.
              -- Se agrego CASE para Update de Situacion de Revista
 	UPDATE tb_ColaDeMovimientos SET  SitRev =  CASE @Movimiento WHEN 1 THEN SitRev ELSE @SituacionRevista END,  Agente = @Agente, CargoSalarial = @CargoSalarial WHERE IdCola = @IdCola
END

-- Si el Movimiento es un Alta hacer Update en la Cola de Movimiento con la Causa del Alta
IF @Movimiento=1
	UPDATE tb_ColaDeMovimientos SET CausaAlta =  @CausaAlta WHERE IdCola = @IdCola

DECLARE @Error INT 
-- Se inserta la Plaza de Movimiento.
INSERT INTO tb_PlazasDeMovimiento (IdPlaza, IdCola, Servicio, Estado, PlazaDestino, Enfermedad, RectificaA, Borrar, CausaBaja, Confirmada, Titularizar, RelInterservicio, HorasDePlaza, CausaAlta, IdServicioRelacionado, FechaDeLicencia, ObligacionesADescontar, IdServicioBase)
VALUES (@IdPlaza, @IdCola, @Servicio, @Estado, @PlazaDestino, @Enfermedad, @RectificaA, @Borrar, @CausaBaja, @Confirmada, @Titularizar, @RelacionInterservicio, @HorasDePlaza, @CausaAlta, @ServicioRelacionado, @FechaDeLicencia, @ObligacionesADescontar,@IdServicioBase)

SET @Error = @@Error

IF @Error <> 0
	UPDATE tb_ColaDeMovimientos SET Respuesta =  RTRIM(LTRIM(Respuesta))+' - COLA SIN PLAZA'   WHERE IdCola = @IdCola
GO
GRANT EXECUTE ON  [dbo].[paAgregarPlazaDeMovimiento] TO [GestionInstitucional]
GRANT EXECUTE ON  [dbo].[paAgregarPlazaDeMovimiento] TO [PersonalDocente]
GO
